查看原文
其他

临床数据分析三板斧之R语言完成自动化三线表

生信技能树 生信技能树 2022-06-06


三线表本来是微软公司的word编辑器里面的概念,就是表属性中,边框里只留上、下内框和标题/层分隔符,其他都选择无就可以了。

但是迁移到临床数据里面,就稍微复杂了一点,就是把条目繁多的临床资料整理一下,比如下面这些信息:

应该是前年,唐医生就提到过有一个R包,名字就是tableone可以做,所以我当时就写了教程,发在GitHub的TCGA视频课程上面,全部代码如下:

step00-install-packages.R
step01-getData-from-GDC.R
step01-getData-from-RTCGA.R
step01-getData-from-Xena.R
step01-getData-from-firehose.R
step02-DEG-3-packages.R
step03-batch-logRank.R
step04-batch-coxp.R
step05-lasso.R
step06-coxph-forest.R
step07-risk-score-distribution.R
step08-Random-foreast.R
step09-miRNA-downstream.R
step10-maftools.R
step11-boxplot.R
step12-correlation.R
step13-split-cohort.R
step14-timeROC.R
step15-choose_lncRNA.R
step16-clinical-tables.R
step17-mutation-signatures.R
step17-others.R
step18-SVM.R

测试数据的临床信息

文章开头展示的就是tableone的临床数据咯

library(tableone)
## survival pcakge for Mayo clinical_infoic's PBC data
library(survival)
data(pbc)
head(pbc)

其实一行代码就可以输出最简易的临床三线表啦

CreateTableOne(data = pbc)

一般来说,临床数据需要仔细调整

使用别人的R包,测试数据的运行,当然很简单啊, 但是大部分情况下,都得仔细认真读R包文档,把自己的数据折腾清洗成为测试数据的样子。

下面就是数据清洗的代码,直接复制粘贴到R里面就可以运行哦,不过tableone包需要你自行安装。

tmpf=tempfile()
download.file('http://bio-info-trainee.com/tmp/TCGA-LUAD-phe_clinical_tables.Rdata', tmpf)
load(tmpf)
clinical_info=phe
head(clinical_info) 
#首先对需要观测的临床特质值进行重新编码 
clinical_info$age<-as.numeric(clinical_info$age)
clinical_info$AGE<-factor(ifelse(clinical_info$age>60,'>60','<=60'),ordered = T)
clinical_info$gender<-factor(toupper(clinical_info$gender),levels=c("MALE""FEMALE"),ordered = T)
clinical_info$stage<-factor(toupper(clinical_info$stage),ordered = T)
clinical_info$t<-factor(clinical_info$t,ordered = T)
clinical_info$n<-factor(clinical_info$n,ordered = T)
clinical_info$m<-factor(clinical_info$m,ordered = T
clinical_info$vital_status<-factor(toupper(clinical_info$vital_status),ordered = T)

clinical_info$race<-factor(clinical_info$race,ordered = T
# 去除不需要的临床信息
clinical_info=clinical_info[,-c(1,10:12)]
dput(names(clinical_info))
## Vector of variables to summarize
myVars <- dput(names(clinical_info))
## Vector of categorical variables that need transformation
catVars <- myVars[c(1,2,4:8,10)]
## ------------------------------------------------------------------------
##三线表类型之一  切割数据 
library(caret)
set.seed(123456789)
sam<- createDataPartition(clinical_info$vital_status, p = .5,list = FALSE)
train <- clinical_info[sam,]
test <- clinical_info[-sam,]
#查看两组一些临床参数切割比例
prop.table(table(train$stage))
prop.table(table(test$stage))
#添加分组
train$group<-'training datasets'
test$group<-'testing datasets'
clinical_info<-rbind(train,test)
clinical_info$group<-factor(clinical_info$group)
##生成三线表
vars <-colnames(clinical_info)[c(2:9,12,14,15)]
library(tableone)
## 最重要的三线表通常是以训练集和数据集来区分:group
tb_group<-CreateTableOne(vars = myVars, strata = c("group"), data = clinical_info,
                          factorVars = catVars) 
tab1<-print(tb_group, nonnormal = c('age','time'),
            exact = c(myVars,'AGE'), smd = TRUE)
summary(tab1)
tab_out<-print(tb_group, catDigits = 1, contDigits = 2, pDigits = 3,
           quote = FALSE, missing = T, explain = TRUE, printToggle = TRUE,
           test = TRUE, smd = T, noSpaces = FALSE, padColnames = FALSE,
           varLabels = FALSE, format = c("fp""f""p""pf")[1],
           showAllLevels = FALSE, cramVars = NULL, dropEqual = FALSE,
           exact = NULL, nonnormal = NULL, minMax = FALSE)
## Save to a CSV file
write.csv(tab_out, file = "TCGA-LUAD-phe_clinical_tables1.csv")

才能得到下面的临床三线表:

这样的数据就可以在Excel或者word里面慢慢调整成为发表级别啦!

大量TCGA数据挖掘文章都有临床三线表

大家可以猜一下临床数据分析三板斧的另外两个是什么

欢迎留言参与互动,也许你可以决定我的教程内容哦!


后记


本来到这里应该是要贴上我们全国巡讲的宣传,但是中秋节临时加开的广州特别班,我们没想过会有很多人报名,毕竟只有区区十天不到的报名时间,但是很快就满20人了,而且非常多迫切想学习的小伙伴找到我们,即使拒绝后仍然是发生如下的对话:

因为加人就要换大一点会议室,成本就增加几千块钱,所以只能是看有没有3个以上的人报名,至少把成本cover掉!

大家仍然是可以尝试报名,广州今年就这一场了,还有很多其他城市的粉丝嗷嗷待哺者等着我们!

号外:中秋节广州3天入门课程报名马上截止:(中秋节一起来学习!)全国巡讲第16站-广州(生信入门课加量不加价)

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存